package com.ruoyi.system.service.impl;

import java.util.List;

import com.ruoyi.common.enums.filerecord.FileStatusEnum;
import com.ruoyi.common.enums.filerecord.FileTypeEnum;
import com.ruoyi.common.enums.filerecord.IsExecuteEnum;
import com.ruoyi.common.enums.filerecord.StorageTypeEnum;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.vo.FileRecordVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.FileRecordMapper;
import com.ruoyi.system.domain.FileRecord;
import com.ruoyi.system.service.IFileRecordService;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

/**
 * 文件记录信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-10-16
 */
@Service
public class FileRecordServiceImpl implements IFileRecordService {
    @Autowired
    private FileRecordMapper fileRecordMapper;

    @Override
    public Integer saveBathEntity(List<FileRecordVO> fileRecordVOList) {
        if(CollectionUtils.isEmpty(fileRecordVOList)){
            return 0;
        }
        fileRecordMapper.saveBathEntity(fileRecordVOList);
        return fileRecordVOList.size();
    }

    @Override
    public Integer updateBatchByIds(List<FileRecordVO> fileRecordVOList) {
        if(CollectionUtils.isEmpty(fileRecordVOList)){
            return 0;
        }
        fileRecordMapper.updateBatchByIds(fileRecordVOList);
        return fileRecordVOList.size();
    }

    @Override
    public List<FileRecordVO> queryFileRecordList(FileRecordVO queryVO) {
        List<FileRecordVO> result = this.fileRecordMapper.queryFileRecordList(queryVO);
        // TODO 枚举处理
        handleFileRecordEnumList(result);

        return result;
    }


    private void handleFileRecordEnumList(List<FileRecordVO> result) {
        if(!CollectionUtils.isEmpty(result)){
            for (FileRecordVO fileRecordVO : result) {
                handleFileRecordEnum(fileRecordVO);
            }
        }
    }

    private void handleFileRecordEnum(FileRecordVO fileRecordVO) {
        if (!ObjectUtils.isEmpty(fileRecordVO)) {
            if(StorageTypeEnum.LOCAL.getCode().equals(fileRecordVO.getStorageType())){
                fileRecordVO.setStorageTypeStr(StorageTypeEnum.LOCAL.getInfo());
            }else if(StorageTypeEnum.CLOUD.getCode().equals(fileRecordVO.getStorageType())){
                fileRecordVO.setStorageTypeStr(StorageTypeEnum.CLOUD.getInfo());
            }

            if(FileStatusEnum.NORMAL.getCode().equals(fileRecordVO.getStatus())){
                fileRecordVO.setStatusStr(FileStatusEnum.NORMAL.getInfo());
            }else if(FileStatusEnum.DAMAGE.getCode().equals(fileRecordVO.getStatus())){
                fileRecordVO.setStatusStr(FileStatusEnum.DAMAGE.getInfo());
            }else if(FileStatusEnum.EXPIRED.getCode().equals(fileRecordVO.getStatus())){
                fileRecordVO.setStatusStr(FileStatusEnum.EXPIRED.getInfo());
            }

            if(IsExecuteEnum.NO_EXECUTE.getCode().equals(fileRecordVO.getIsExecute())){
                fileRecordVO.setIsExecuteStr(IsExecuteEnum.NO_EXECUTE.getInfo());
            }else if(IsExecuteEnum.EXECUTE.getCode().equals(fileRecordVO.getIsExecute())){
                fileRecordVO.setIsExecuteStr(IsExecuteEnum.EXECUTE.getInfo());
            }

            if(FileTypeEnum.SQL.getCode().equals(fileRecordVO.getFileType())){
                fileRecordVO.setFileTypeStr(FileTypeEnum.SQL.getInfo());
            }else if(FileTypeEnum.JPG.getCode().equals(fileRecordVO.getFileType())){
                fileRecordVO.setFileTypeStr(FileTypeEnum.JPG.getInfo());
            }else if(FileTypeEnum.PNG.getCode().equals(fileRecordVO.getFileType())){
                fileRecordVO.setFileTypeStr(FileTypeEnum.PNG.getInfo());
            }else if(FileTypeEnum.MP4.getCode().equals(fileRecordVO.getFileType())){
                fileRecordVO.setFileTypeStr(FileTypeEnum.MP4.getCode());
            }else if(FileTypeEnum.MP3.getCode().equals(fileRecordVO.getFileType())){
                fileRecordVO.setFileTypeStr(FileTypeEnum.MP3.getInfo());
            }else if(FileTypeEnum.OTHER.getCode().equals(fileRecordVO.getFileType())){
                fileRecordVO.setFileTypeStr(FileTypeEnum.OTHER.getInfo());
            }

        }
    }


    /**
     * 查询文件记录信息
     *
     * @param id 文件记录信息主键
     * @return 文件记录信息
     */
    @Override
    public FileRecord selectFileRecordById(Long id)
    {
        return fileRecordMapper.selectFileRecordById(id);
    }

    /**
     * 查询文件记录信息列表
     *
     * @param fileRecord 文件记录信息
     * @return 文件记录信息
     */
    @Override
    public List<FileRecord> selectFileRecordList(FileRecord fileRecord)
    {
        return fileRecordMapper.selectFileRecordList(fileRecord);
    }

    /**
     * 新增文件记录信息
     *
     * @param fileRecord 文件记录信息
     * @return 结果
     */
    @Override
    public int insertFileRecord(FileRecord fileRecord)
    {
        fileRecord.setCreateTime(DateUtils.getNowDate());
        return fileRecordMapper.insertFileRecord(fileRecord);
    }

    /**
     * 修改文件记录信息
     *
     * @param fileRecord 文件记录信息
     * @return 结果
     */
    @Override
    public int updateFileRecord(FileRecord fileRecord)
    {
        fileRecord.setUpdateTime(DateUtils.getNowDate());
        return fileRecordMapper.updateFileRecord(fileRecord);
    }

    /**
     * 批量删除文件记录信息
     *
     * @param ids 需要删除的文件记录信息主键
     * @return 结果
     */
    @Override
    public int deleteFileRecordByIds(Long[] ids)
    {
        return fileRecordMapper.deleteFileRecordByIds(ids);
    }

    /**
     * 删除文件记录信息信息
     *
     * @param id 文件记录信息主键
     * @return 结果
     */
    @Override
    public int deleteFileRecordById(Long id)
    {
        return fileRecordMapper.deleteFileRecordById(id);
    }


}
